package com.dingwen.treasure.kettle.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dingwen.treasure.kettle.dto.modify.TaskInfoDto;
import com.dingwen.treasure.kettle.dto.modify.TaskInfoStateDto;
import com.dingwen.treasure.kettle.dto.query.TaskInfoQueryDto;
import com.dingwen.treasure.kettle.entity.TaskInfo;
import com.dingwen.treasure.kettle.vo.TaskInfoVo;

import java.util.List;
import java.util.Map;

/**
 * TaskInfoService
 *
 * @author dingwen
 * @date 2022/08/22
 */
public interface TaskInfoService extends IService<TaskInfo> {
    /**
     * 成功次数 +1
     *
     * @param taskId 任务id
     */
    void incrementForSuccess(Long taskId);


    /**
     * 失败次数 +1
     *
     * @param taskId 任务id
     */
    void incrementForFail(Long taskId);

    /**
     * 刷新
     */
    void refresh();


    /**
     * 分页查询任务列表
     *
     * @param taskInfoQueryDto 任务信息dto
     * @return {@link IPage}
     */
    IPage<TaskInfoVo> getTaskInfoPage(TaskInfoQueryDto taskInfoQueryDto);


    /**
     * 立即执行
     *
     * @param taskId 任务id
     */
    void executeImmediately(Long taskId);

    /**
     * 添加周期任务
     *
     * @param taskInfo 任务信息dto
     * @return {@link TaskInfo}
     */
    TaskInfoVo addPeriodicTask(TaskInfoDto taskInfo);


    /**
     * 获取所有正在执行中的周期任务
     *
     * @return {@link List}<{@link TaskInfoVo}>
     */
    List<Map<String, Object>> getRunningPeriodicTaskAll();

    /**
     * 通过任务Id修改任务信息
     *
     * @param taskInfoDto 任务信息dto
     */
    void modifyTaskInfoByTaskId(TaskInfoDto taskInfoDto);

    /**
     * 通过任务Id删除任务信息
     *
     * @param taskId   任务id
     * @param taskType 任务类型：1一次性任务 2周期性任务
     */
    void removeTaskInfoByTaskId(Long taskId,Integer taskType);

    /**
     * 修改任务状态
     *
     * @param taskInfoStateDto 任务信息状态dto
     */
    void modifyTaskState(TaskInfoStateDto taskInfoStateDto);


    /**
     * 通过任务id查询TaskInfoVo
     *
     * @param taskId 任务id
     * @return {@link TaskInfoVo}
     */
    TaskInfoVo getByTaskId(Long taskId);
}
